@@ -0,0 +1,54 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+from __future__ import unicode_literals |
|
3 |
+ |
|
4 |
+from django.db import models, migrations |
|
5 |
+ |
|
6 |
+ |
|
7 |
+class Migration(migrations.Migration): |
|
8 |
+ |
|
9 |
+ dependencies = [ |
|
10 |
+ ('account', '0017_auto_20160908_1053'), |
|
11 |
+ ] |
|
12 |
+ |
|
13 |
+ operations = [ |
|
14 |
+ migrations.AddField( |
|
15 |
+ model_name='lensmanincomeexpensesinfo', |
|
16 |
+ name='freeze_amount', |
|
17 |
+ field=models.IntegerField(default=0, help_text='\u51bb\u7ed3\u4f59\u989d\u589e\u51cf\u6570\u91cf(\u5206)', verbose_name='freeze_amount'), |
|
18 |
+ ), |
|
19 |
+ migrations.AddField( |
|
20 |
+ model_name='lensmanincomeexpensesinfo', |
|
21 |
+ name='freeze_balance', |
|
22 |
+ field=models.IntegerField(default=0, help_text='\u51bb\u7ed3\u4f59\u989d\u589e\u51cf\u540e\u6570\u91cf(\u5206)', verbose_name='freeze_balance'), |
|
23 |
+ ), |
|
24 |
+ migrations.AddField( |
|
25 |
+ model_name='lensmaninfo', |
|
26 |
+ name='freeze_balance', |
|
27 |
+ field=models.IntegerField(default=0, help_text='\u6444\u5f71\u5e08\u51bb\u7ed3\u4f59\u989d(\u5206)', verbose_name='freeze_balance'), |
|
28 |
+ ), |
|
29 |
+ migrations.AddField( |
|
30 |
+ model_name='userincomeexpensesinfo', |
|
31 |
+ name='freeze_amount', |
|
32 |
+ field=models.IntegerField(default=0, help_text='\u51bb\u7ed3\u4f59\u989d\u589e\u51cf\u6570\u91cf(\u5206)', verbose_name='freeze_amount'), |
|
33 |
+ ), |
|
34 |
+ migrations.AddField( |
|
35 |
+ model_name='userincomeexpensesinfo', |
|
36 |
+ name='freeze_balance', |
|
37 |
+ field=models.IntegerField(default=0, help_text='\u51bb\u7ed3\u4f59\u989d\u589e\u51cf\u540e\u6570\u91cf(\u5206)', verbose_name='freeze_balance'), |
|
38 |
+ ), |
|
39 |
+ migrations.AddField( |
|
40 |
+ model_name='userinfo', |
|
41 |
+ name='freeze_balance', |
|
42 |
+ field=models.IntegerField(default=0, help_text='\u7528\u6237\u51bb\u7ed3\u4f59\u989d(\u5206)', verbose_name='freeze_balance'), |
|
43 |
+ ), |
|
44 |
+ migrations.AlterField( |
|
45 |
+ model_name='lensmanincomeexpensesinfo', |
|
46 |
+ name='type', |
|
47 |
+ field=models.IntegerField(default=0, help_text='\u6536\u652f\u7c7b\u522b', verbose_name='type', choices=[(0, '\u6536\u5165'), (1, '\u652f\u51fa'), (2, '\u89e3\u51bb')]), |
|
48 |
+ ), |
|
49 |
+ migrations.AlterField( |
|
50 |
+ model_name='userincomeexpensesinfo', |
|
51 |
+ name='type', |
|
52 |
+ field=models.IntegerField(default=0, help_text='\u6536\u652f\u7c7b\u522b', verbose_name='type', choices=[(0, '\u6536\u5165'), (1, '\u652f\u51fa'), (2, '\u89e3\u51bb')]), |
|
53 |
+ ), |
|
54 |
+ ] |
@@ -51,6 +51,7 @@ class LensmanInfo(CreateUpdateMixin): |
||
51 | 51 |
origin = models.IntegerField(_(u'origin'), default=999, help_text=u'摄影师高清图价格(分)') |
52 | 52 |
|
53 | 53 |
balance = models.IntegerField(_(u'balance'), default=0, help_text=u'摄影师余额(分)') |
54 |
+ freeze_balance = models.IntegerField(_(u'freeze_balance'), default=0, help_text=u'摄影师冻结余额(分)') |
|
54 | 55 |
|
55 | 56 |
user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=UNVERIFIED) |
56 | 57 |
refused_reason = models.TextField(_(u'refused_reason'), blank=True, null=True, help_text=u'审核拒绝原因') |
@@ -104,10 +105,12 @@ class LensmanLoginLogInfo(CreateUpdateMixin): |
||
104 | 105 |
class LensmanIncomeExpensesInfo(CreateUpdateMixin): |
105 | 106 |
INCOME = 0 |
106 | 107 |
EXPENSE = 1 |
108 |
+ UNFREEZE = 2 |
|
107 | 109 |
|
108 | 110 |
TYPE = ( |
109 | 111 |
(INCOME, u'收入'), |
110 | 112 |
(EXPENSE, u'支出'), |
113 |
+ (UNFREEZE, u'解冻'), |
|
111 | 114 |
) |
112 | 115 |
|
113 | 116 |
lensman_id = models.CharField(_(u'lensman_id'), max_length=255, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True) |
@@ -116,6 +119,8 @@ class LensmanIncomeExpensesInfo(CreateUpdateMixin): |
||
116 | 119 |
type = models.IntegerField(_(u'type'), choices=TYPE, default=INCOME, help_text=u'收支类别') |
117 | 120 |
amount = models.IntegerField(_(u'amount'), default=0, help_text=u'余额增减数量(分)') |
118 | 121 |
balance = models.IntegerField(_(u'balance'), default=0, help_text=u'余额增减后数量(分)') |
122 |
+ freeze_amount = models.IntegerField(_(u'freeze_amount'), default=0, help_text=u'冻结余额增减数量(分)') |
|
123 |
+ freeze_balance = models.IntegerField(_(u'freeze_balance'), default=0, help_text=u'冻结余额增减后数量(分)') |
|
119 | 124 |
|
120 | 125 |
remark = models.CharField(_(u'remark'), max_length=255, blank=True, null=True, help_text=u'备注') |
121 | 126 |
|
@@ -211,6 +216,7 @@ class UserInfo(CreateUpdateMixin): |
||
211 | 216 |
location = models.CharField(_(u'location'), max_length=255, blank=True, null=True, help_text=u'用户地址') |
212 | 217 |
|
213 | 218 |
balance = models.IntegerField(_(u'balance'), default=0, help_text=u'用户余额(分)') |
219 |
+ freeze_balance = models.IntegerField(_(u'freeze_balance'), default=0, help_text=u'用户冻结余额(分)') |
|
214 | 220 |
|
215 | 221 |
user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=UNVERIFIED) |
216 | 222 |
|
@@ -277,10 +283,12 @@ class UserLoginLogInfo(CreateUpdateMixin): |
||
277 | 283 |
class UserIncomeExpensesInfo(CreateUpdateMixin): |
278 | 284 |
INCOME = 0 |
279 | 285 |
EXPENSE = 1 |
286 |
+ UNFREEZE = 2 |
|
280 | 287 |
|
281 | 288 |
TYPE = ( |
282 | 289 |
(INCOME, u'收入'), |
283 | 290 |
(EXPENSE, u'支出'), |
291 |
+ (UNFREEZE, u'解冻'), |
|
284 | 292 |
) |
285 | 293 |
|
286 | 294 |
user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) |
@@ -289,6 +297,8 @@ class UserIncomeExpensesInfo(CreateUpdateMixin): |
||
289 | 297 |
type = models.IntegerField(_(u'type'), choices=TYPE, default=INCOME, help_text=u'收支类别') |
290 | 298 |
amount = models.IntegerField(_(u'amount'), default=0, help_text=u'余额增减数量(分)') |
291 | 299 |
balance = models.IntegerField(_(u'balance'), default=0, help_text=u'余额增减后数量(分)') |
300 |
+ freeze_amount = models.IntegerField(_(u'freeze_amount'), default=0, help_text=u'冻结余额增减数量(分)') |
|
301 |
+ freeze_balance = models.IntegerField(_(u'freeze_balance'), default=0, help_text=u'冻结余额增减后数量(分)') |
|
292 | 302 |
|
293 | 303 |
remark = models.CharField(_(u'remark'), max_length=255, blank=True, null=True, help_text=u'备注') |
294 | 304 |
|
@@ -319,6 +319,8 @@ def lensman_origin_photo_upload_api(request): |
||
319 | 319 |
type=UserIncomeExpensesInfo.INCOME, |
320 | 320 |
amount=order.total_fee, |
321 | 321 |
balance=from_user.balance, |
322 |
+ freeze_amount=0, |
|
323 |
+ freeze_balance=from_user.freeze_balance, |
|
322 | 324 |
remark=u'高清图购买退款', |
323 | 325 |
) |
324 | 326 |
|
@@ -330,7 +332,7 @@ def lensman_origin_photo_upload_api(request): |
||
330 | 332 |
|
331 | 333 |
if to_user: |
332 | 334 |
# 减少余额 |
333 |
- to_user.balance -= order.total_fee |
|
335 |
+ to_user.freeze_balance -= order.total_fee |
|
334 | 336 |
to_user.save() |
335 | 337 |
# 余额记录 |
336 | 338 |
UserIncomeExpensesInfo.objects.create( |
@@ -339,6 +341,8 @@ def lensman_origin_photo_upload_api(request): |
||
339 | 341 |
type=UserIncomeExpensesInfo.EXPENSE, |
340 | 342 |
amount=order.total_fee, |
341 | 343 |
balance=to_user.balance, |
344 |
+ freeze_amount=0, |
|
345 |
+ freeze_balance=to_user.freeze_balance, |
|
342 | 346 |
remark=u'高清图购买退款', |
343 | 347 |
) |
344 | 348 |
|
@@ -393,6 +397,29 @@ def lensman_origin_photo_upload_api(request): |
||
393 | 397 |
|
394 | 398 |
set_lensman_order_record(porder) |
395 | 399 |
|
400 |
+ # 摄影师余额解冻 |
|
401 |
+ try: |
|
402 |
+ to_user = UserInfo.objects.select_for_update().get(user_id=order.to_uid) |
|
403 |
+ except UserInfo.DoesNotExist: |
|
404 |
+ pass |
|
405 |
+ |
|
406 |
+ if to_user: |
|
407 |
+ # 减少余额 |
|
408 |
+ to_user.balance += order.total_fee |
|
409 |
+ to_user.freeze_balance -= order.total_fee |
|
410 |
+ to_user.save() |
|
411 |
+ # 余额记录 |
|
412 |
+ UserIncomeExpensesInfo.objects.create( |
|
413 |
+ user_id=order.to_uid, |
|
414 |
+ photo_id=order.photo_id, |
|
415 |
+ type=UserIncomeExpensesInfo.UNFREEZE, |
|
416 |
+ amount=order.total_fee, |
|
417 |
+ balance=to_user.balance, |
|
418 |
+ freeze_amount=order.total_fee, |
|
419 |
+ freeze_balance=to_user.freeze_balance, |
|
420 |
+ remark=u'高清图购买退款', |
|
421 |
+ ) |
|
422 |
+ |
|
396 | 423 |
order.photo_status = OrderInfo.FETCHED |
397 | 424 |
order.save() |
398 | 425 |
|
@@ -142,7 +142,12 @@ def order_paid_success(order): |
||
142 | 142 |
except UserInfo.DoesNotExist: |
143 | 143 |
return |
144 | 144 |
|
145 |
- user.balance += order.total_fee |
|
145 |
+ if order.photo_type == OrderInfo.NOMARK: |
|
146 |
+ amount, freeze_amount = total_fee, 0 |
|
147 |
+ user.balance += amount |
|
148 |
+ elif order.photo_type == OrderInfo.ORIGIN: |
|
149 |
+ amount, freeze_amount = 0, total_fee |
|
150 |
+ user.freeze_balance += freeze_amount |
|
146 | 151 |
user.save() |
147 | 152 |
|
148 | 153 |
ymd = tc.local_string(format='%Y%m%d') |
@@ -162,8 +167,10 @@ def order_paid_success(order): |
||
162 | 167 |
user_id=to_uid, |
163 | 168 |
photo_id=order.photo_id, |
164 | 169 |
type=UserIncomeExpensesInfo.INCOME, |
165 |
- amount=total_fee, |
|
170 |
+ amount=amount, |
|
166 | 171 |
balance=user.balance, |
172 |
+ freeze_amount=freeze_amount, |
|
173 |
+ freeze_balance=user.freeze_balance, |
|
167 | 174 |
remark=u'图片购买', |
168 | 175 |
) |
169 | 176 |
|